Methods for protecting data in a mass storage system are well known in the art. Some of these methods include different schemes of RAID (Redundant Array of Independent Disks), defined by the Raid Advisory Board at the University of Berkeley, Calif. For example, RAID 1 provides protection by holding two separate copies of data on separate storage devices, so that complete recovery from failure of one storage device is possible. Other RAID schemes use parity blocks to allow for recovery from a storage device failure. For example, RAID 6 uses two parity blocks, and storage systems constructed according to the RAID 6 scheme can completely recover from failure of two storage devices.
A number of variations of RAID 6 are known in the art. One variation is described in “EVENODD: An Optimal Scheme for Tolerating Double Disk Failures in RAID Architectures” by Blaum et al., IEEE Transactions on Computers, 44 (1995). The EVENODD system uses two exclusive disjunction (XOR) parity blocks.
A second variation is described by Newberg et al. in “String layouts for a redundant array of inexpensive disks”, Algorithmica 12 (2-3), 209-214 (1997). The system described by Newberg arranges data blocks in a square array, and calculates a parity block for each row and each column of the array. The data blocks and the parity blocks are stored in separate storage devices.
However, an improvement to known methods of data storage is desirable.